home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Sample Code / AOCE Sample Code / PowerTalk Access Modules / Sample PMSAM / PMSAM Framework / RoboSamSlot / CContentReader.cp < prev    next >
Encoding:
Text File  |  1995-07-28  |  5.5 KB  |  251 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        CContentReader.cp
  3.  
  4.     Contains:    xxx put contents here xxx
  5.  
  6.     Written by:    Tim Harnett
  7.  
  8.     Copyright:    © 1994 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <5>     1/13/95    TMH        removed use of MailHandler
  13.          <4>     1/11/95    TMH        added nested letter functions, and tweak to generalize framework
  14.          <3>    12/12/94    TMH        use of gCurrentThread->Yield()
  15.          <2>     11/2/94    JHB        Adding support for Sending eWorld Mail
  16.          <1>     9/20/94    TMH        Abandon RoadsideRest embrace Mercury
  17.          <3>     9/20/94    TMH        some experimental but working threaded stuff
  18.          <2>      9/9/94    TMH        TIncoming/TOutgoing adaptations
  19.                  6/17/94    TMH        xxx put comment here xxx
  20.  
  21.     To Do:  Lots
  22.     
  23.     
  24.     ••• This will probably have to be embellished to handle different kinds
  25.         of reading.  Arguments for the type masks etc.
  26. */
  27.  
  28.  
  29.  
  30. #ifndef __TThread__
  31. #include "TThread.h"
  32. #endif
  33.  
  34. #ifndef __Globals__
  35. #include "Globals.h"
  36. #endif
  37.  
  38. #ifndef __STRING__
  39. #include "String.h"
  40. #endif
  41.  
  42. #ifndef __OCEERRORS__
  43. #include "OCEErrors.h"
  44. #endif
  45.  
  46. #ifndef __CContentReader__
  47. #include "CContentReader.h"
  48. #endif
  49.  
  50. #ifndef __OutgoingXLetter__
  51. #include "OutgoingXLetter.h"
  52. #endif
  53.  
  54. #ifndef __ALetter__
  55. #include "ALetter.h"
  56. #endif
  57.  
  58. //------------------------------------------
  59. //        C C o n t e n t R e a d e r
  60. //------------------------------------------
  61.  
  62.  
  63.  
  64. //--------------------------------------------------------------------------
  65. CContentReader::CContentReader(MailMsgRef msgRef)
  66. {
  67.     memset(&fPB,0,sizeof(MSAMGetContentPB));
  68.  
  69.         
  70.     fPB.mailMsgRef = msgRef;
  71.     fPB.buffer.buffer = fContentReadBuf;
  72.     fPB.buffer.bufferSize = kReadBlockSize;
  73.     fPB.segmentMask = kMailTextSegmentMask | kMailPictSegmentMask | kMailSoundSegmentMask | 
  74.                         kMailMovieSegmentMask;    // spool everything except styled text
  75.                         
  76.     fOSErr = 0;            
  77.  
  78.  
  79.     
  80.     fTextLength = 0;
  81.     fStyledTextLength = 0;
  82.     fSoundLength = 0;
  83.     fMovieLength = 0;
  84.     fPictLength = 0;
  85.  
  86.     fNTextSegments = 0;
  87.     fNStyledTextSegments = 0;
  88.     fNSoundSegments = 0;
  89.     fNMovieSegments = 0;
  90.     fNPictSegments = 0;
  91.  
  92. }
  93.  
  94. //--------------------------------------------------------------------------
  95. OSErr CContentReader::ReadContentBlock()
  96. {
  97.     fPB.segmentID = 0;        //••• ???? why ????
  98.     fPB.buffer.dataSize = 0;
  99.  
  100.  
  101.     MSAMGetContent((MSAMParam *)&fPB,true);
  102.     do {
  103.         gCurrentThread->Yield();
  104.     } while( fPB.ioResult > 0 );
  105.  
  106.     fOSErr = fPB.ioResult;
  107.     
  108.     if (fOSErr==kIPMBlkNotFound) {
  109.         fOSErr = noErr;
  110.         fPB.endOfSegment = true;
  111.         fPB.endOfContent = true;
  112.     }
  113.         
  114.     return fOSErr;
  115. }
  116.  
  117. //--------------------------------------------------------------------------
  118. OSErr CContentReader::ReadContent(TOutgoingXLetter* outgoingXLetter)
  119. {
  120.     
  121.     do { 
  122.     
  123.         this->ReadContentBlock();    
  124.     
  125.         switch (this->SegmentType()) {
  126.             case kMailTextSegmentType:
  127.                 outgoingXLetter->PutText(*this);
  128.                 break;
  129.             case kMailPictSegmentType:
  130.                 outgoingXLetter->PutPict(*this);
  131.                 break;
  132.             case kMailSoundSegmentType:
  133.                 outgoingXLetter->PutSound(*this);
  134.                 break;
  135.             case kMailStyledTextSegmentType:
  136.                 //outgoingXLetter->PutStyledText(*this);
  137.                 break;
  138.             case kMailMovieSegmentType:
  139.                 outgoingXLetter->PutMovie(*this);
  140.                 break;
  141.             default:
  142.                 break;
  143.         }
  144.         
  145.         while( this->MoreSegmentContent()    )        //    if we are not at the end of a segment skip to its end.
  146.             this->ReadContentBlock();
  147.                 
  148.     } while ( this->MoreContent() ) ;
  149.     
  150.  
  151.     return fOSErr;
  152.     
  153.         
  154. }
  155.  
  156.  
  157.  
  158. //--------------------------------------------------------------------------
  159. OSErr CContentReader::ReadContent(TOutgoingALetter* outgoingALetter)
  160. {
  161.     
  162.     do { 
  163.     
  164.         this->ReadContentBlock();    
  165.     
  166.         switch (this->SegmentType()) {
  167.             case kMailTextSegmentType:
  168.                 outgoingALetter->fHasText = true;
  169.                 outgoingALetter->fTextLength = this->SegmentLength();
  170.                 outgoingALetter->fNTextSegments++;
  171.                 break;
  172.             case kMailPictSegmentType:
  173.                 outgoingALetter->fHasPict = true;
  174.                 outgoingALetter->fPictLength = this->SegmentLength();
  175.                 outgoingALetter->fNPictSegments++;
  176.                 break;
  177.             case kMailSoundSegmentType:
  178.                 outgoingALetter->fHasSound = true;
  179.                 outgoingALetter->fSoundLength = this->SegmentLength();
  180.                 outgoingALetter->fNSoundSegments++;
  181.                 break;
  182.             case kMailStyledTextSegmentType:
  183.                 outgoingALetter->fHasStyledText = true;
  184.                 outgoingALetter->fStyledTextLength = this->SegmentLength();
  185.                 outgoingALetter->fNStyledTextSegments++;
  186.                 break;
  187.             case kMailMovieSegmentType:
  188.                 outgoingALetter->fHasMovie = true;
  189.                 outgoingALetter->fMovieLength = this->SegmentLength();
  190.                 outgoingALetter->fNMovieSegments++;
  191.                 break;
  192.             default:
  193.                 break;
  194.         }
  195.         
  196.         while( this->MoreSegmentContent()    )        //    if we are not at the end of a segment skip to its end.
  197.             this->ReadContentBlock();
  198.                 
  199.     } while ( this->MoreContent() ) ;
  200.     
  201.  
  202.     return fOSErr;
  203.     
  204.         
  205. }
  206.  
  207.  
  208. //--------------------------------------------------------------------------
  209. OSErr CContentReader::InventoryContent()
  210. {
  211.     
  212.     do { 
  213.     
  214.         this->ReadContentBlock();    
  215.     
  216.         switch (this->SegmentType()) {
  217.             case kMailTextSegmentType:
  218.                 fTextLength = this->SegmentLength();
  219.                 fNTextSegments++;
  220.                 break;
  221.             case kMailPictSegmentType:
  222.                 fPictLength = this->SegmentLength();
  223.                 fNPictSegments++;
  224.                 break;
  225.             case kMailSoundSegmentType:
  226.                 fSoundLength = this->SegmentLength();
  227.                 fNSoundSegments++;
  228.                 break;
  229.             case kMailStyledTextSegmentType:
  230.                 fStyledTextLength = this->SegmentLength();
  231.                 fNStyledTextSegments++;
  232.                 break;
  233.             case kMailMovieSegmentType:
  234.                 fMovieLength = this->SegmentLength();
  235.                 fNMovieSegments++;
  236.                 break;
  237.             default:
  238.                 break;
  239.         }
  240.         
  241.         while( this->MoreSegmentContent()    )        //    if we are not at the end of a segment skip to its end.
  242.             this->ReadContentBlock();
  243.                 
  244.     } while ( this->MoreContent() ) ;
  245.     
  246.  
  247.     return fOSErr;
  248.     
  249.         
  250. }
  251.